/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package squarenumber;

import java.util.Scanner;

/**
 *
 * @author Admin
 */
public class TasksWhileDoWhile
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        System.out.println("Задачи на while do..while:".toUpperCase());
        System.out.println("1. Выведите все точные квадраты натуральных чисел, не превосходящие данного числа N.");
        System.out.println("2. Используя операции сложения и Вычитания, найти частное от Деления n на K, а также остаток от этого Деления.");
        System.out.println("3. Определить число n является степенью числа 3, то вывести true, если не является — вывести false.\n");

        System.out.println("Введи номер задачи:");

        int a = readInt();

        while (a != 1 && a != 2 && a != 3)
        {
            System.out.println("Введи правильный номер:");
//        if (a<1 || a>3)
            a = readInt();
        }

        switch (a)
        {
            case 1:

                System.out.println("\nЗадача №1 'Квадраты числа N'\n");
                System.out.println("Введи число N:");
                int n = readInt();
                if (n < 0)
                {
                    n = -n;
                }
                int num = 1;
                int squ = 1;
                System.out.printf("квадраты числа %d =", n);
                while (squ <= n)
                {
                    if (squ == 1)
                    {
                        System.out.printf(" %d", squ);
                    } else
                    {
                        System.out.printf(", %d", squ);
                    }
                    ++num;
                    if (squ < n)
                    {
                        squ = num * num;
                    }

                    if (squ == n)
                    {
                        System.out.printf(", %d", squ);
                        break;
                    }
                }
                System.out.println(".");
                break;

            case 2:

                System.out.println("\nЗадача №2 'Деление n/K'\n");
                System.out.println("Введи число n (n>=1) :");
                int n1 = readInt();
                while (n1 < 1)
                {
                    System.out.println("Введи число n согласно условия (n>=1) :");
                    n1 = readInt();
                }

                System.out.println("Введи число К (K<=10^10):");
                int k = readInt();
                double j = Math.pow(10, 10);
                while (k < 0 || k > j)
                {
                    System.out.println("Введи положительное число К согласно условия (K<=10^10):");
                    k = readInt();
                }

                int chastnoe = 0;
                if (n1 >= k)
                {
                    while (n1 > k || n1 == k)
                    {
                        ++chastnoe;
                        n1 = n1 - k;
                        if (n1 < k)
                        {
                            break;
                        }
                        if (n1 == k)
                        {
                            ++chastnoe;
                            n1 = n1 - k;
                        }

                    }

                } else
                {
                    System.out.printf("При данном делении %d/%d получаем число меньше 1\n ", n1, k);
                    break;
//                    n1 = 0;
                }

                System.out.printf("Частное= %d.   Остаток= %d.\n", chastnoe, n1);

                break;

            case 3:

                System.out.println("\nЗадача №3 'Число N является степенью числа 3?'\n");
                System.out.println("Введи число N (1<=N<=10^10): ");

                int n2 = readInt();
                int t = 0;
                int c = 1;
                double l = Math.pow(10, 10);

                while (n2 < 0 || n2 > l)
                {
                    System.out.println("Введи число N согласно условия (1<=N<=10^10) :");
                    n2 = readInt();
                }

                while (c < n2)
                {
                    c = (int) Math.pow(3, ++t);

//            System.out.printf("%d", c);
                    if (n2 == c)
                    {
                        System.out.println(true);
                        break;
                    }

                }
                if (n2 != c)
                {
                    System.out.println(false);
                }

                break;
        }

    }

    private static int readInt()
    {
        Scanner sc = new Scanner(System.in);
        String srt = sc.nextLine();
        while (true)
        {
            try
            {
                return Integer.parseInt(srt);
            } catch (NumberFormatException ex)
            {
//                ex.printStackTrace();
                System.out.println("Неправильное значение, введите правильное!");
                srt = sc.nextLine();
            }
        }
    }

}
